package com.may.config;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * Created by Youjie on 2017/7/23.
 */

@Aspect
@Component
public class DataSourceAspect {

    private Logger log = LoggerFactory.getLogger(getClass());

    @Pointcut("execution(* com.may.dataA.mapper.*.*(..))")
    public void pointCutA(){}

    @Pointcut("execution(* com.may.dataB.mapper.*.*(..))")
    public void pointCutB(){}

    @Pointcut("execution(* com.may.dataC.mapper.*.*(..))")
    public void pointCutC(){}
    @Pointcut("execution(* com.may..*.*(..))")
    public void annotation(){}
    


    public void setDataSourceDefault(JoinPoint jp){
        DataSourceManager.set(DataSources.DATASOURCE_A);
        log.info("切换数据源","切换到默认数据源A");
        System.out.println(jp.getSignature().getDeclaringType().getSimpleName());
        System.out.println(jp.getSignature().getDeclaringTypeName());
        System.out.println(jp.getSignature().getName());
        System.out.println("------------"+jp.getSignature().getModifiers());
       
    }
    public void setDataSourceB(JoinPoint jp){
        DataSourceManager.set(DataSources.DATASOURCE_B);
        log.info("切换数据源","切换到数据源B");
    }

    public void setDataSourceC(JoinPoint jp){
        DataSourceManager.set(DataSources.DATASOURCE_C);
        log.info("切换数据源","切换到数据源C");
    }

    @Before("@annotation(ds)")
    public void setAnnotationDataSource(JoinPoint jp,DataSource ds){
        // 获取当前的指定的数据源;
        String dsId = ds.value();
        // 如果不在我们注入的所有的数据源范围之内，那么输出警告信息，系统自动使用默认的数据源。
        /*if (!DataSourceManager.containsDataSource(dsId)) {

            log.error("数据源[{}]不存在，使用默认数据源 > {}", ds.value(), jp.getSignature());

        } else {

            log.debug("Use DataSource : {} > {}", ds.value(), jp.getSignature());

            // 找到的话，那么设置到动态数据源上下文中。
            DynamicDataSourceContextHolder.setDataSourceType(ds.name());
        }*/

        //将string值转换为enum
        DataSourceManager.set(Enum.valueOf(DataSources.class,ds.value()));

        log.info("切换数据源"+ds.value(),"切换到默认数据源"+ds.value());
    }


    
}




